package framework.jackson;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.me.study.javaCore.enumm.BaseEnum;

/**
 * Jackson 2.2+ 之后，默认使用 @JsonValue 序列化、反序列化。<p></p>
 * 也可以使用 `@JsonCreator` 指定方法自定义 反序列化逻辑
 *
 * @author ME
 */
public enum GenderEnum implements BaseEnum {
    /** 男性 */
    MALE("1", "男"),
    /** 女性 */
    FEMALE("2", "女");

    @JsonValue
    private final String code;
    private final String desc;

    GenderEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 反序列化时，使用 @JsonCreator 指定的方法构造对象，可以是 构造函数、静态工厂方法
     */
    @JsonCreator
    public static GenderEnum getItem(String code){
        for (GenderEnum item : values()) {
            if (item.code.equals(code)) {
                return item;
            }
        }
        return null;
    }

    /**
     * 序列化时，使用 @JsonValue 指定的方法作为 json字符串的字面值
      */
    @Override
    public String getCode() {
        return this.code;
    }

    @Override
    public String getDesc() {
        return this.desc;
    }
}
